#!c:/Python27/python.exe -u
# -*- coding: utf-8/IGNORE',$string);-*-
''' Tema - Linguagens de Programação Dinâmicas
Trabalho de Python á Discíplina - Linguagens de Programação

Histograms.py, tem como função efectuar histogramas estatisticos  
Depois de efectuar a leitura dos dados, vindos da Banco de Dados, o objetivo do Histograms é  
efetuar uma interface gráfica neste caso histogramas simples e compostos representando assim as estatisticas dos dados pedidos. 
'''
__author__ = "Miguel Fialho, Nº 5958 - Pedro Serrano, Nº 3958"
__copyright__ = "Copyright 2014 - Miguel Fialho / Pedro Serrano"
__credits__ = ""
__license__ = "GPL"
__maintainer__ = "1.0"
__email__ = "mF200_5@hotmail.com"
__status__ = ""

'''Importações de bibliotecas e módulos para o desenvolvimento de funções aritméticas, gráficas, lógicas, entre outras...'''
from Reports import*
import Reports
import Tkinter
import os
import tkFileDialog
from pylab import*
from Statistics import*
from ReadFile import *
import ReadFile
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot


def HistogramIPC(self):
    '''
    Função responsável por criar o histograma de Índice de Precos ao consumidor (IPC)
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Ipc_global = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Ipc_global.insert( i ,Statistics().getIpc_global(i))
            pass
        pass
    mu,sigma=100,15
    x = mu + sigma * np.random.randn(len(Ipc_global))
    n , bins , patches = plt.hist(x,50 ,normed=1,facecolor='g', alpha=0.75)
    plt.xlabel('Anos')
    plt.ylabel('Indice de Precos')
    plt.title('Indice de Precos ao consumidor')
    plt.text(70, 0.05,  r'$\mu=100. \ \sigma=15$')
    plt.grid(True)
    plt.show()
    pass

def HistogramInflation(self):
    '''
    Função responsável por criar o histograma de Taxa de Inflação
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Inflacao = list()
    for i in range (2, 38):
        if os.path.isfile("DataBase.db") == True:
            Inflacao.insert( i ,Statistics().getInflacao(i))
            pass
        pass
    mu,sigma=100,15
    x = mu + sigma * np.random.randn(len(Inflacao))
    n , bins , patches = plt.hist(x,50 ,normed=1,facecolor='g', alpha=0.75)
    plt.xlabel('Anos')
    plt.ylabel('Inflacao')
    plt.title('Taxa de Inflacao')
    plt.text(70, 0.05,  r'$\mu=100. \ \sigma=15$')
    plt.grid(True)
    plt.show()
    pass

def HistogramMinimumRemuneration(self):
    '''
    Função responsável por criar o histograma de Taxa de Inflação
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rum_minima = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rum_minima.insert( i ,Statistics().getRum_minima(i))
            pass
        pass
    mu,sigma=100,15
    x = mu + sigma * np.random.randn(len(Rum_minima))
    n , bins , patches = plt.hist(x,50 ,normed=1,facecolor='g', alpha=0.75)
    plt.xlabel('Anos')
    plt.ylabel('Remuneracao minima')
    plt.title('Remuneracao minima mensal dos funcionarios publicos')
    plt.text(70, 0.05,  r'$\mu=100. \ \sigma=15$')
    plt.grid(True)
    plt.show()
    pass

def HistogramMaximumRemuneration(self):
    '''
    Função responsável por criar o histograma de Remuneracao maxima mensal dos funcionarios publicos
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rum_maxima = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rum_maxima.insert( i ,Statistics().getRum_maxima(i))
            pass
        pass
    mu,sigma=100,15
    x = mu + sigma * np.random.randn(len(Rum_maxima))
    n , bins , patches = plt.hist(x,50 ,normed=1,facecolor='g', alpha=0.75)
    plt.xlabel('Anos')
    plt.ylabel('Remuneracao maxima')
    plt.title('Remuneracao maxima mensal dos funcionarios publicos')
    plt.text(70, 0.05,  r'$\mu=100. \ \sigma=15$')
    plt.grid(True)
    plt.show()
    pass

def HistogramMinimumMaximumRemuneration(self):
    '''
    Função responsável por criar o histograma de Remuneracao maxima mensal dos funcionarios publicos
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rum_minima = list()
    Rum_maxima = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rum_minima.insert( i ,Statistics().getRum_minima(i))
            Rum_maxima.insert( i ,Statistics().getRum_maxima(i))
            pass
        pass
    mu,sigma=100,15
    Rum_minima_Min = mu + sigma * np.random.randn(len(Rum_minima))
    Rum_maxima_Max = mu + sigma * np.random.randn(len(Rum_maxima))
    figura = plt.figure()
    ax1 = figura.add_subplot(1,1,1)
    ax1.hist((Rum_minima_Min,Rum_maxima_Max), bins=100, normed=1, histtype='bar', color=("red", "green"))
    ax1.set_title("Remuneracao Minima e Maxima mensal dos funcionarios publicos a precos constantes.:")
    ax1.set_ylabel("Remuneracoes.:")
    ax1.set_xlabel("Anos.:")
    plt.show()
    pass

def HistogramPIB(self):
    '''
    Função responsável por criar o histograma de Produto Interno Bruto Anual (PIB) per capita
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Pib = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Pib.insert( i ,Statistics().getPib(i))
            pass
        pass
    mu,sigma=100,15
    Pib_hist = mu + sigma * np.random.randn(len(Pib))
    n , bins , patches = plt.hist(Pib_hist,50 ,normed=1,facecolor='g', alpha=0.75)
    plt.xlabel('Anos')
    plt.ylabel('Produto Interno Bruto')
    plt.title('Produto Interno Bruto Anual (PIB) per capita')
    plt.text(70, 0.05,  r'$\mu=100. \ \sigma=15$')
    plt.grid(True)
    plt.show()
    pass

def HistogramNationalRemuneration(self):
    '''
    Função responsável por criar o histograma de Rendimento nacional anual bruto per capita
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rem_nac = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rem_nac.insert( i ,Statistics().getRem_nac(i))
            pass
        pass
    mu,sigma=100,15
    Rem_nac_hist = mu + sigma * np.random.randn(len(Rem_nac))
    n , bins , patches = plt.hist(Rem_nac_hist,50 ,normed=1,facecolor='g', alpha=0.75)
    plt.xlabel('Anos')
    plt.ylabel('Rendimento nacional')
    plt.title('Rendimento nacional anual bruto per capita')
    plt.text(70, 0.05,  r'$\mu=100. \ \sigma=15$')
    plt.grid(True)
    plt.show()
    pass

def HistogramDisposableRemuneration(self):
    '''
    Função responsável por criar o histograma de Rendimento disponivel anual bruto per capita
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rem_disp = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
                Rem_disp.insert( i ,Statistics().getRem_disp(i))
                pass
        pass
    mu,sigma=100,15
    Rem_disp_hist = mu + sigma * np.random.randn(len(Rem_disp))
    n , bins , patches = plt.hist(Rem_disp_hist,50 ,normed=1,facecolor='g', alpha=0.75)
    plt.xlabel('Anos')
    plt.ylabel('Rendimento disponivel')
    plt.title('Rendimento disponivel anual bruto per capita')
    plt.text(70, 0.05,  r'$\mu=100. \ \sigma=15$')
    plt.grid(True)
    plt.show()
    pass

def HistogramPerCapitaAnnualRemuneration(self):
    '''
    Função responsável por criar o histograma de Remuneracoes per capita anuais
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Remu_capital = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Remu_capital.insert( i ,Statistics().getRemu_capital(i))
            pass
        pass
    mu,sigma=100,15
    Remu_capital_hist = mu + sigma * np.random.randn(len(Remu_capital))
    n , bins , patches = plt.hist(Remu_capital_hist,50 ,normed=1,facecolor='g', alpha=0.75)
    plt.xlabel('Anos')
    plt.ylabel('Remuneracoes')
    plt.title('Remuneracoes per capita anuais')
    plt.text(70, 0.05,  r'$\mu=100. \ \sigma=15$')
    plt.grid(True)
    plt.show()
    pass